home *** CD-ROM | disk | FTP | other *** search
/ Aminet 12 / Aminet 12 (1996)(GTI - Schatztruhe)[!][Jun 1996].iso / Aminet / dev / e / framework.lha / fw / eventLoop.e < prev    next >
Encoding:
Text File  |  1996-01-28  |  1.3 KB  |  51 lines

  1.  
  2. -> eventLoop is an abstraction of an application event loop .
  3.  
  4. -> Copyright © Guichard Damien 01/04/1996
  5.  
  6. OPT MODULE
  7. OPT EXPORT
  8.  
  9. MODULE 'fw/any'
  10. MODULE 'fw/wbObject'
  11.  
  12. OBJECT eventLoop OF any
  13.   signalBits:LONG
  14.   wbObjs[NUMSIGNALS]:ARRAY OF LONG
  15. ENDOBJECT
  16.  
  17. -> Add a WorkBench object to the event loop.
  18. PROC addWBObject(wbObj:PTR TO wbObject) OF eventLoop
  19.   DEF signalBit
  20.   IF (signalBit:=wbObj.signal())<>-1
  21.     self.signalBits:=self.signalBits OR Shl(1,signalBit)
  22.     self.wbObjs[signalBit]:=wbObj
  23.   ENDIF
  24. ENDPROC
  25.  
  26. -> Starts the processing of the event loop.
  27. -> Do nothing if no AddWBObject() has been made before.
  28. PROC do() OF eventLoop
  29.   DEF signalsReceived,signalBit,result,wbObj:PTR TO wbObject
  30.   WHILE self.signalBits<>0
  31.     signalsReceived:=Wait(self.signalBits)
  32.     FOR signalBit:=0 TO NUMSIGNALS-1
  33.       IF Shl(1,signalBit) AND signalsReceived
  34.         wbObj:=self.wbObjs[signalBit]
  35.         result:=wbObj.handleActivation()
  36.         IF result=STOPIT
  37.           wbObj.remove()
  38.           self.wbObjs[signalBit]:=NIL
  39.           self.signalBits:=Eor(self.signalBits,Shl(1,signalBit))
  40.         ELSEIF result=STOPALL
  41.           FOR signalBit:=0 TO NUMSIGNALS-1
  42.             IF wbObj:=self.wbObjs[signalBit] THEN wbObj.remove()
  43.           ENDFOR
  44.           self.signalBits:=0
  45.         ENDIF
  46.       ENDIF
  47.     ENDFOR
  48.   ENDWHILE
  49. ENDPROC
  50.  
  51.